﻿/**
 * 提供个性配置功能，某些类型是通过代码生成器生成的，因此需要提供一定的机制，让开发人员可以自定义某些配置。
 * 
 */
Ext.define('Happy.mixin.CustomConfigable', {
    /**
    * 个性化的配置某些数组，如：items、buttons 等。
    *
    * @param {String} key
    * @param {String} prefix
    */
    customConfigArray: function (configs, key, prefix) {
        var me = this;

        if (!configs) {
            return;
        }

        Ext.Array.each(configs, function (config) {
            var method_i = prefix + config[key] + '-fn';

            Ext.apply(config, me[prefix + config[key]] || {});
            if (me[method_i]) {
                me[method_i].call(me, config);
            }

            if (!me.scene) {
                return;
            }
            Ext.apply(config, me.scene[prefix + config[key]] || {});
            if (me.scene[method_i]) {
                me.scene[method_i].call(me.scene, config);
            }
        });


        var method_j = prefix + 'extras' + '-fn';

        Ext.Array.push(configs, me[prefix + 'extras'] || []);
        if (me[method_j]) {
            me[method_j].call(me, configs);
        }

        if (!me.scene) {
            return;
        }
        Ext.Array.push(configs, me.scene[prefix + 'extras'] || []);
        if (me.scene[method_j]) {
            me.scene[method_j].call(me.scene, configs);
        }
    }
});